package main.二分查找;

/**
 * @author tmh
 * @date 2024/7/24 21:10
 * @description
 */
public class T153寻找旋转排序数组中的最小值 {
    /**
     * 如果nums[mid]的值小于最后一个元素的值，最小值就在num[mid]的左面
     * 如果nums[mid]的值大于最后一个元素的值，最小值在num[mid]的右面
     *
     * @param nums
     * @return
     */
    public int findMin(int[] nums) {
        int low = 0;
        //high为nums的长度，是下面的while循环就是一个开区间
        int high = nums.length;
        int n = nums.length - 1;
        while (low < high) {
            //这里用右移的时候需要加括号
            int mid = low + ((high - low) >> 1);
            if (nums[mid] > nums[n]) {
                low = mid + 1;
            } else {
                //开区间，小于等于==》大变小high = mid,经验总结hhhh
                high = mid;
            }
        }
        //最后的nums[high]就是我们的最小值
        return nums[high];
    }
}
